Finished task properties and added tests
authorJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 17 May 2018 09:44:55 +0000 (11:44 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 17 May 2018 09:44:55 +0000 (11:44 +0200)
Debug/src/siri/db/subdir.mk
Release/src/siri/db/subdir.mk
include/siri/db/db.h
include/siri/db/tasks.h
include/timeit/timeit.h
src/siri/db/db.c
src/siri/db/server.c
src/siri/db/servers.c
src/test/test.c
src/timeit/timeit.c
test/test_server.py

index d2ee8e0efd14cd4a9fed2974f8587f1cd0197051..017c14ec1f5c9da97ff4de32e211816aad62f2b3 100644 (file)
@@ -36,6 +36,7 @@ C_SRCS += \
 ../src/siri/db/servers.c \
 ../src/siri/db/shard.c \
 ../src/siri/db/shards.c \
+../src/siri/db/tasks.c \
 ../src/siri/db/time.c \
 ../src/siri/db/user.c \
 ../src/siri/db/users.c \
@@ -74,6 +75,7 @@ OBJS += \
 ./src/siri/db/servers.o \
 ./src/siri/db/shard.o \
 ./src/siri/db/shards.o \
+./src/siri/db/tasks.o \
 ./src/siri/db/time.o \
 ./src/siri/db/user.o \
 ./src/siri/db/users.o \
@@ -112,6 +114,7 @@ C_DEPS += \
 ./src/siri/db/servers.d \
 ./src/siri/db/shard.d \
 ./src/siri/db/shards.d \
+./src/siri/db/tasks.d \
 ./src/siri/db/time.d \
 ./src/siri/db/user.d \
 ./src/siri/db/users.d \
index dfc8f0166a119023f9e54518315397e9dd02b1bb..563c5ecdcd27735bce8c9a9a2e118c6e59cd0da1 100644 (file)
@@ -36,6 +36,7 @@ C_SRCS += \
 ../src/siri/db/servers.c \
 ../src/siri/db/shard.c \
 ../src/siri/db/shards.c \
+../src/siri/db/tasks.c \
 ../src/siri/db/time.c \
 ../src/siri/db/user.c \
 ../src/siri/db/users.c \
@@ -74,6 +75,7 @@ OBJS += \
 ./src/siri/db/servers.o \
 ./src/siri/db/shard.o \
 ./src/siri/db/shards.o \
+./src/siri/db/tasks.o \
 ./src/siri/db/time.o \
 ./src/siri/db/user.o \
 ./src/siri/db/users.o \
@@ -112,6 +114,7 @@ C_DEPS += \
 ./src/siri/db/servers.d \
 ./src/siri/db/shard.d \
 ./src/siri/db/shards.d \
+./src/siri/db/tasks.d \
 ./src/siri/db/time.d \
 ./src/siri/db/user.d \
 ./src/siri/db/users.d \
index 7f7cc2823d08bef2ac7cfbce598d575777a346c8..8821c0ff9215fa1930a526bdce547eb1d907c867 100644 (file)
@@ -28,6 +28,7 @@
 #include <siri/db/replicate.h>
 #include <siri/db/reindex.h>
 #include <siri/db/groups.h>
+#include <siri/db/tasks.h>
 
 #define SIRIDB_MAX_SIZE_ERR_MSG 1024
 #define SIRIDB_MAX_DBNAME_LEN 256  // 255 + NULL
@@ -86,7 +87,7 @@ typedef struct siridb_s
     iso8601_tz_t tz;
     size_t buffer_size;
     size_t buffer_len;
-    time_t start_ts;                    // in seconds, to calculate up-time.
+    struct timespec start_time;         // to calculate up-time.
     uint64_t duration_num;              // number duration in s, ms, us or ns
     uint64_t duration_log;              // log duration in s, ms, us or ns
     char * dbname;
index a0274a7885d43dc66be62658f1db488a376607e2..d3bff751ea8447ac906faabe1b016f197aede988 100644 (file)
@@ -22,11 +22,10 @@ typedef struct siridb_tasks_s
     double idle_time;
 } siridb_tasks_t;
 
-
-void siridb_tasks_init(siridb_tasks_t *tasks);
+void siridb_tasks_init(siridb_tasks_t * tasks);
 
 #define siridb_tasks_inc(tasks) \
-if (!tasks.active++) tasks.idle_time += timeit_stop(&tasks._timeit)
+if (!tasks.active++) tasks.idle_time += timeit_get(&tasks._timeit)
 
 #define siridb_tasks_dec(tasks) \
 if (!--tasks.active) timeit_start(&tasks._timeit)
index cc51056a173e212f07df188ff8c27bc46c890f25..0714d669ec8bd5c08f830930c65c8c718b52eea5 100644 (file)
@@ -13,7 +13,7 @@
 
 #include <time.h>
 
-double timeit_stop(struct timespec * start);
+double timeit_get(struct timespec * start);
 
 #define timeit_start(start) clock_gettime(CLOCK_MONOTONIC, start)
 
index 970e0b77075b49882ab28954817b4933d5842d37..f47fe8e37859aff0886a78c797afcd43d9b86571 100644 (file)
@@ -34,6 +34,7 @@
 #include <uuid/uuid.h>
 #include <xpath/xpath.h>
 #include <slist/slist.h>
+#include <timeit/timeit.h>
 
 /*
  * database.dat
@@ -64,7 +65,7 @@ static int SIRIDB_from_unpacker(
  */
 int32_t siridb_get_uptime(siridb_t * siridb)
 {
-    return (int32_t) (time(NULL) - siridb->start_ts);
+    return (int32_t) timeit_get(&siridb->start_time);
 }
 
 /*
@@ -74,7 +75,9 @@ int32_t siridb_get_uptime(siridb_t * siridb)
 int8_t siridb_get_idle_percentage(siridb_t * siridb)
 {
     double uptime = (double) siridb_get_uptime(siridb);
-    return (int8_t) round(siridb->tasks.idle_time / uptime * 100.0f);
+    return (uptime)
+            ? (int8_t) round(siridb->tasks.idle_time / uptime * 100.0f)
+            : 0;
 }
 
 
@@ -340,7 +343,7 @@ siridb_t * siridb_new(const char * dbpath, int lock_flags)
         }
     }
 
-    siridb->start_ts = time(NULL);
+    timeit_start(&siridb->start_time);
 
     uv_mutex_lock(&siri.siridb_mutex);
 
index 1150f2bd8764bd835d97e0823ecc44d7a8d0ba35..0f6d5abd4d2bd02342d949365660405dd0d32a34 100644 (file)
@@ -1172,6 +1172,18 @@ int siridb_server_cexpr_cb(
                 (int64_t) wserver->siridb->tasks.active,
                 cond->int64);
 
+    case CLERI_GID_K_IDLE_PERCENTAGE:
+        return cexpr_int_cmp(
+                cond->operator,
+                (int64_t) siridb_get_idle_percentage(wserver->siridb),
+                cond->int64);
+
+    case CLERI_GID_K_IDLE_TIME:
+        return cexpr_int_cmp(
+                cond->operator,
+                (int64_t) wserver->siridb->tasks.idle_time,
+                cond->int64);
+
     case CLERI_GID_K_REINDEX_PROGRESS:
         return cexpr_str_cmp(
                 cond->operator,
index 7d6bda2e40ecd29f24893fd28195d4f09b02c2c0..40d92d80840dc1b209cf499e2b2cf940a3a8f6e5 100644 (file)
@@ -649,13 +649,25 @@ int siridb_servers_list(siridb_server_t * server, uv_async_t * handle)
          * that specific server.
          */
         case CLERI_GID_K_ACTIVE_HANDLES:
-#if DEBUG
-            assert (siridb->server == server);
-#endif
             qp_add_int32(
                     query->packer,
                     (int32_t) siri.loop->active_handles);
             break;
+        case CLERI_GID_K_ACTIVE_TASKS:
+            qp_add_int32(
+                    query->packer,
+                    (int32_t) siridb->tasks.active);
+            break;
+        case CLERI_GID_K_IDLE_PERCENTAGE:
+            qp_add_int8(
+                    query->packer,
+                    siridb_get_idle_percentage(siridb));
+            break;
+        case CLERI_GID_K_IDLE_TIME:
+            qp_add_int32(
+                    query->packer,
+                    (int32_t) siridb->tasks.idle_time);
+            break;
         case CLERI_GID_K_LOG_LEVEL:
             qp_add_string(query->packer, Logger.level_name);
             break;
@@ -692,7 +704,7 @@ int siridb_servers_list(siridb_server_t * server, uv_async_t * handle)
         case CLERI_GID_K_UPTIME:
             qp_add_int32(
                     query->packer,
-                    (int32_t) (time(NULL) - siridb->start_ts));
+                    siridb_get_uptime(siridb));
             break;
         }
     }
index 4d6a8376c07177297d909b8213575ab8de0c7e47..69a575dee19c8996041013bf75307cc52a28f443 100644 (file)
@@ -1050,7 +1050,7 @@ int run_tests(void)
     rc += test_strx_to_double();
 
     printf("\nSuccessfully performed %d tests in %.3f milliseconds!\n\n",
-            rc, timeit_stop(&start) * 1000);
+            rc, timeit_get(&start) * 1000);
 
     return 0;
 }
index 86c87a17587f7d826d5b831721f9bea6b9c48821..56549e0c17f5bf9b22bbff0b56b13374acc9f572 100644 (file)
@@ -13,9 +13,9 @@
 #include <time.h>
 
 /*
- * Returns time past in seconds
+ * Returns time past in seconds since given start time.
  */
-double timeit_stop(struct timespec * start)
+double timeit_get(struct timespec * start)
 {
     struct timespec end;
 
index 96952e64fbbe74efa1c109bfec2c78d68b461816..e5435c42afb9ceda42e5ed5fffee48791c044d9f 100644 (file)
@@ -61,6 +61,9 @@ class TestServer(TestBase):
         result = await self.client1.query('list servers log_level')
         self.assertEqual(result.pop('servers'), [['info'], ['info']])
 
+        result = await self.client1.query('list servers active_tasks where active_tasks >= 0 and idle_time >= 0 and idle_percentage <= 100')
+        self.assertEqual(result.pop('servers'), [[1], [1]])
+
         result = await self.client0.query('alter servers where active_handles > 1 set log_level debug')
 
         result = await self.client1.query('list servers log_level')